#pragma once


namespace Be
{
	class HierachyComponent;
}

namespace Be
{
	class HierachyNode
		: public Node
	{
	public:
		struct Seed
		{
			Entity* m_pParent;
		};

	public:
		HierachyNode(Entity* p_pEntity);
		virtual ~HierachyNode();

	private:
		ComPtr<HierachyComponent> m_pHierachyComponent;

	private:
		friend class HierachySystem;
	};
}

namespace Be
{
	class HierachySystem
		: public System<HierachyNode>
	{
	private:
		HierachySystem();
		virtual ~HierachySystem();

	public:
		static HierachySystem& Inst();

	protected:
		virtual void OnRegister(HierachyNode* p_pNode, const HierachyNode::Seed& p_rSeed);
		virtual void OnUnregister(HierachyNode* p_pNode);
		virtual void OnUpdate(HierachyNode* p_pNode);
	};
}
